home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / ModemLink / Examples / TestML.c < prev    next >
C/C++ Source or Header  |  1997-10-25  |  5KB  |  138 lines

  1. /*
  2. ** NAME: TestML.c
  3. ** DESC: A terminal style program to test the modemlink.lib.  It will open the
  4. **       serial.device using the settings saved in serial.prefs.
  5. **
  6. ** AUTHOR:        DATE:       DESCRIPTION:
  7. ** ~~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  8. ** Mike Veroukis  06 Apr 1997 Created
  9. ** Mike Veroukis  13 Oct 1997 Added extra print statements to help make it
  10. **                            clearer what it's doing.
  11. */
  12.  
  13.  
  14. #include <exec/types.h>
  15. #include <exec/memory.h>
  16. #include <exec/io.h>
  17. #include <devices/serial.h>
  18. #include <utility/tagitem.h>
  19.  
  20. #include <proto/exec.h>
  21. #include <proto/dos.h>
  22. #include <proto/intuition.h>
  23.  
  24. #include <stdio.h>
  25. #include <string.h>
  26.  
  27. #include <ModemLink/ModemLink.h>
  28. #include <clib/ModemLink_protos.h>
  29. #include "DeviceStuff.h"
  30.  
  31. void main(int argc, char **argv)
  32. {
  33.   struct IOExtLink *LinkWriteIO, *LinkReadIO;
  34.   struct IOExtSer *SerIO;
  35.   struct MsgPort *LinkWriteMP, *LinkReadMP, *SerMP;
  36.   char buf[512];
  37.   int Connect, BusyCount = 0;
  38.  
  39.   printf("Test ModemLink -- Let's hope this thing works!!!\n");
  40.  
  41.   if (argc < 3) {
  42.     if (LinkWriteMP = CreateMsgPort()) {
  43.       if (LinkWriteIO = CreateIORequest(LinkWriteMP, sizeof(struct IOExtLink))) {
  44.         if (OpenSerialDevice(&SerMP, &SerIO, "serial.device", 0L)) {
  45.           if (argc == 2)
  46.             do {
  47.               if (BusyCount)
  48.                 Delay(150);
  49.  
  50.               printf("Dialing %s....\n", argv[1]);
  51.  
  52.               Connect = ML_DialTags(SerIO, argv[1], TAG_DONE);
  53.               printf("Dialer ReturnCode: %d\n", Connect);
  54.             } while (Connect == MODEM_BUSY && BusyCount++ < 2);
  55.           else {
  56.             printf("Waiting for incomming call...\n");
  57.  
  58.             Connect = ML_AnswerTagList(SerIO, NULL);
  59.           }
  60.  
  61.           printf("Modem ReturnCode: %d\n", Connect);
  62.  
  63.           if (Connect == MODEM_CONNECT) {
  64.             Connect = ML_EstablishTagList(LinkWriteIO, SerIO, NULL);
  65.  
  66.             printf("Establish ReturnCode: %d\n", Connect);
  67.  
  68.             if (Connect == EstErr_OK) {
  69.               printf("Connected!!!\n\n");
  70.               printf("Type message and hit return to send\n");
  71.               printf("Hit return to check for incomming messages\n");
  72.               printf("Enter '.' and hit return on a new line to quit\n\n");
  73.  
  74.               if (CloneIO((struct IORequest *)LinkWriteIO, &LinkReadMP, (struct IORequest **)&LinkReadIO)) {
  75.                 LinkReadIO->IOLink.io_Command = CMD_READ;
  76.                 LinkReadIO->IOLink.io_Data = 0;
  77.                 ML_SendIO((struct IORequest *)LinkReadIO);
  78.  
  79.                 while (1) {
  80.                   printf("\n: ");
  81.                   gets(buf);
  82.                   if (buf[0] == '.' && buf[1] == 0)
  83.                     break;
  84.  
  85.                   if (buf[0] > ' ') {
  86.                     printf("Sending: [%s]\n", buf);
  87.  
  88.                     LinkWriteIO->IOLink.io_Command = CMD_WRITE;
  89.                     LinkWriteIO->IOLink.io_Data = &buf;
  90.                     LinkWriteIO->IOLink.io_Length = strlen(buf) + 1;
  91.                     ML_DoIO((struct IORequest *)LinkWriteIO);
  92.                   }
  93.  
  94.                   if (CheckIO((struct IORequest *)LinkReadIO)) {
  95.                     WaitIO((struct IORequest *)LinkReadIO);
  96.                     DisplayBeep(NULL);
  97.  
  98.                     if (!LinkReadIO->IOLink.io_Error) {
  99.                       printf(">> [%s]\n", LinkReadIO->IOLink.io_Data);
  100.  
  101.                       FreeMem(LinkReadIO->IOLink.io_Data, LinkReadIO->IOLink.io_Length);
  102.  
  103.                       LinkReadIO->IOLink.io_Command = CMD_READ;
  104.                       LinkReadIO->IOLink.io_Data = 0L;
  105.                       ML_SendIO((struct IORequest *)LinkReadIO);
  106.                     }
  107.                     else
  108.                       printf("io_Error: %X\n", LinkReadIO->IOLink.io_Error);
  109.                   }
  110.  
  111.                   LinkWriteIO->IOLink.io_Command = MLCMD_QUERY;
  112.                   ML_DoIO((struct IORequest *)LinkWriteIO);
  113.                   if (LinkWriteIO->IOLink.io_Error)
  114.                     break;
  115.                 }
  116.  
  117.                 if (!LinkReadIO->IOLink.io_Error) {
  118.                   ML_AbortIO((struct IORequest *)LinkReadIO);
  119.                   if (!CheckIO((struct IORequest *)LinkReadIO))
  120.                     WaitIO((struct IORequest *)LinkReadIO);
  121.                 }
  122.  
  123.                 DeleteIO_MP(LinkReadMP, (struct IORequest *)LinkReadIO);
  124.               }
  125.               ML_Terminate(LinkWriteIO);
  126.             }
  127.           }
  128.           SafeCloseDevice(SerMP, (struct IORequest *)SerIO);
  129.         }
  130.         DeleteIORequest((struct IORequest *) LinkWriteIO);
  131.       }
  132.       DeleteMsgPort(LinkWriteMP);
  133.     }
  134.   }
  135.   else
  136.     printf("\nUSAGE: TestML <PhoneNumber>\n");
  137. }
  138.